package com.etc.dao;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import javax.sql.rowset.CachedRowSet;

import com.etc.entity.Dept;
import com.etc.util.DBUtil;

/**
 * 部门的数据访问类
 * 
 * @author Administrator
 *
 */
public class DeptDao_HashMap {

	// key 什么类型? Value又是什么类型?
	// 一般来说 key应该是唯一能够标记一个对象的属性
	// 此时我们认为dept中的deptNo应该是唯一,所以此时设置Integer类型的key
	// Value应该是一个部门对象
	private HashMap<Integer, Dept> hm = new HashMap<Integer, Dept>();

	/**
	 * 增加部门
	 * 
	 * @param dept
	 *            部门对象
	 * @return true 增加成功,false 增加失败
	 */
	public boolean addDept(Dept dept) {
		if (dept != null) {
			// 添加到mysql数据库中去
			String sql = "insert into dept values(null,?,?)";
			boolean flag = DBUtil.exUpdate(sql, dept.getDeptName(), dept.getDeptAddress());
			return flag;
		}
		return false;
	}

	/**
	 * 遍历的方法,dao这一侧不做输出,做返回,以HashMap为例
	 * 
	 * @return HashMap ,key->deptNo,value->dept对象
	 */
	public HashMap<Integer, Dept> getDept() {
		HashMap<Integer, Dept> hashMap = new HashMap<Integer, Dept>();
		// 这里要调用DBUtil的方法完成查询
		String sql = "select deptNo,deptName,deptAddress from dept";
		CachedRowSet crs = DBUtil.exQuery(sql);
		try {
			while (crs.next()) {
				int deptNo = crs.getInt("deptNo");
				String deptName = crs.getString("deptName");
				String deptAddress = crs.getString("deptAddress");
				// 其实这里得到的deptNo deptName deptAddress都是一个dept对象的属性
				// 此处构建一个dept对象
				Dept dept = new Dept(deptNo, deptName, deptAddress);
				// hashMap的put方法
				// 参数1 部门编号 参数2是部门对象
				hashMap.put(deptNo, dept);
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				crs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return hashMap;
	}

	/**
	 * 根据条件进行模糊查询
	 * 
	 * @param cons
	 *            模糊查询关键字
	 * @return 集合 , HashMap<Integer, Dept>,部门编号为key,对象为value
	 */
	public HashMap<Integer, Dept> getDeptByLike(String cons) {
		HashMap<Integer, Dept> hashMap = new HashMap<Integer, Dept>();
		// 这里要调用DBUtil的方法完成查询
		String sql = "select deptNo,deptName,deptAddress from dept where deptName like ?";
		CachedRowSet crs = DBUtil.exQuery(sql, "%" + cons + "%");
		try {
			while (crs.next()) {
				int deptNo = crs.getInt("deptNo");
				String deptName = crs.getString("deptName");
				String deptAddress = crs.getString("deptAddress");
				// 其实这里得到的deptNo deptName deptAddress都是一个dept对象的属性
				// 此处构建一个dept对象
				Dept dept = new Dept(deptNo, deptName, deptAddress);
				// hashMap的put方法
				// 参数1 部门编号 参数2是部门对象
				hashMap.put(deptNo, dept);
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				crs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return hashMap;
	}

	/**
	 * 根据部门编号来查询部门信息
	 * 
	 * @param deptNo
	 *            部门编号
	 * @return dept对象,null则没有找到,不为null则找到了
	 */
	public Dept getDeptByNo(int deptNo) {

		Dept dept = null;
		// 使用sql语句查询数据库表
		String sql = "select deptNo,deptName,deptAddress from dept where deptNo=?";

		// 调用 DBUtil.exQuery()的方法执行查询
		CachedRowSet crs = DBUtil.exQuery(sql, deptNo);

		try {
			if (crs.next()) {
				String deptName = crs.getString("deptName");
				String deptAddress = crs.getString("deptAddress");
				// 其实这里得到的deptNo deptName deptAddress都是一个dept对象的属性
				// 此处构建一个dept对象
				dept = new Dept(deptNo, deptName, deptAddress);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return dept;

	}

	/**
	 * 根据部门编号删除部门信息
	 * 
	 * @param deptNo
	 *            部门编号
	 * @return true 删除成功 false 删除失败
	 */
	public boolean deleteDeptByNo(int deptNo) {

		
		// sql语句
		String sql = "delete from dept where deptNo = ?";
		return DBUtil.exUpdate(sql, deptNo);

	}

	/**
	 * 修改部门信息
	 * @param dept 部门对象
	 * @return  true 修改成功/ false 修改失败
	 */
	public boolean updateDept(Dept dept) {
		// sql语句
		String sql = "update  dept set deptName=? ,deptAddress=? where deptNo = ?";
		return DBUtil.exUpdate(sql, dept.getDeptName(), dept.getDeptAddress(), dept.getDeptNo());

	}
	
	

}
